package com.jpress.ejb;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import com.jpress.model.Noticia;
import com.jpress.remote.NoticiaRemote;

@Stateless(mappedName="bean/post")
public class NoticiaEJB implements NoticiaRemote{

	@PersistenceContext(unitName="jpressEE")
	private EntityManager entityManager;
	
	@Override
	public void inserir(Noticia noticia) throws Exception{
		try {
			entityManager.persist(noticia);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public void atualizar(Noticia noticia) throws Exception {
		try {
			entityManager.merge(noticia);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public void excluir(Noticia noticia) throws Exception {
		try {
			noticia = entityManager.merge(noticia);
			entityManager.remove(noticia);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public List<Noticia> findAll(){
		Query query = entityManager.createNamedQuery("Noticia.findAll");
		@SuppressWarnings("unchecked")
		List<Noticia> resultado = (List<Noticia>) query.getResultList();
		return resultado;
	}
	
	@Override
	public List<Noticia> findAllByUsuarioCodigo(int usuarioCodigo){
		Query query = entityManager.createNamedQuery("Noticia.findAllByUsuarioCodigo");
		query.setParameter("usuarioCodigo", usuarioCodigo);
		@SuppressWarnings("unchecked")
		List<Noticia> resultado = (List<Noticia>) query.getResultList();
		return resultado;
	}
	
	@Override
	public List<Noticia> searchByTituloAndTexto(String titulo, String texto){
		Query query = entityManager.createNamedQuery("Noticia.searchByTituloAndTexto");
		query.setParameter("titulo", "%" + titulo + "%");
		query.setParameter("conteudo", "%" + texto + "%");
		@SuppressWarnings("unchecked")
		List<Noticia> resultado = (List<Noticia>) query.getResultList();
		return resultado;
	}	

	@Override
	public long getQuantidadeNoticias() {
		Query query = entityManager.createNamedQuery("Noticia.countNoticias");
		return (long) query.getSingleResult();
	}
}
